﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Knights.Recursos;
using Knights.Objeto;

namespace Knights
{
    class CargadorMapa
    {
        private static int ladoPlano;
        private static int anchoMapa, largoMapa;
        private static Color[,] datosColores;

        public static void CargarMapaMundo(Mundo mundo) //codigo repetido -> refactorizar
        {
            ladoPlano = Terreno.LadoPlano;
            anchoMapa = Texturas.Mapa.Width;
            largoMapa = Texturas.Mapa.Height;
            datosColores = TexturaAColores(Texturas.Mapa);

            CargarDatosMapa(mundo);
        }

        private static void CargarDatosMapa(Mundo mundo)
        {
            for (int x = 0; x < anchoMapa; x++)
            {
                for (int z = 0; z < largoMapa; z++)
                {
                    if (datosColores[x, z] == Color.Blue)
                        AgregarPersonaje(mundo, x * ladoPlano, z * ladoPlano);

                    if (datosColores[x, z] == Color.White)  //posicion inicial personaje
                        Mundo.PersonajePrincipal.Posicion = new Vector3(x, 0, z);
                }
            }
        }

        private static void AgregarPersonaje(Mundo mundo, int posicionX, int posicionY)
        {
            Personaje personaje = new Personaje("UnPersonaje", new Vector3(posicionX, posicionY, 0));
            mundo.AgregarObjeto(personaje);
        }

        private static Color[,] TexturaAColores(Texture2D textura)
        {
            Color[] colores2D = new Color[textura.Width * textura.Height];
            textura.GetData(colores2D);

            Color[,] datos = new Color[textura.Width, textura.Height];

            for (int i = 0; i < textura.Width; i++)
            {
                for (int j = 0; j < textura.Height; j++)
                {
                    datos[i, j] = colores2D[i + j * textura.Width];
                }
            }

            return datos;
        }
    }
}
